Bingo, Computer Graphics & Game Developer
本文源于Unreal官方Rendering Overview的基本概念理解和翻译
与Unreal Engine 3中的Forward Lighting Path不同的是,Unreal Engine 4中所有的光源都采用的是延迟渲染的技术。各种材质都会讲各自的属性写入GBuffers当中,因此在根据光源计算时,光源直接通过Buffer上的per-pixel的材质属性来计算光照。
Forward Lighting Path本质上就是最传统的光源场景渲染方式,二者对比可见Forward Rendering vs. Deferred Rendering。当在指定渲染目标时,前者的做法是对场景中的每一个几何体都对每个光源进行一次管线中的光照计算,最后直接着色叠加。
后者为先行计算四张2D Image/Buffer(Screen Space Depth,Surface Normals,Diffuse Color,Specular color and specular power),VS中计算各图所需的几何体信息,而PS只存图,之后每个光源才与四张图上的内容进行着色计算。
总结而言 Forward Lighting Path的伪代码
for each object
for each light
shading
Deffered Shading
for each pixel
for each light
shading
Forward Rendering Path
Deffered Shading
不过延迟渲染也不是完美的,在比较小的场景下延迟渲染会明显增加显存消耗和渲染速度下降,所以比较适合于较大型场景。另一个缺点是,延迟渲染对待多着色模型的场景是比较吃力。(感谢孤独的守候的知识分享)
UE4中有三种不同的光源
这些光源的使用场景也是根据不同的游戏场景,不同的性能品质要求会需要的权衡。每个游戏都还为自己选用最合适的光源类型。
Movable Lights: 在运行期间可以改变位置,旋转朝向,改变颜色,亮度,衰退因子,半径等任何光源拥有的属性都可以动态修改。因此这些光源不会预先烘焙光照贴图,也不会产生任何的间接光照(实时渲染中间接光照一般都是预计算完成)。
Static Lights: 静止光源的位置是不可以改变的,但是光源的亮度和颜色等都可以随之改变,因此这也是与静态光源有着最大差异的地方。但是其所改变的光源的属性都只会影响直接光照,间接光照都是由Lightmass预计算的,因此运行时改变其值也不会影响。
Stationary lights:静态光源是不能在运行时改变任何属性的光源,他们会在Lightmass中计算完毕,之后不会对性能造成任何过多的影响。因此他是三者当中拥有中等效果,较低的可更改性但也是性能最友好的一个光源类型。
以及
半透明材质的发光以及着色是在单一的光源前进传递(Single Forward Pass)中保证其正确性的,但是在多通道的光源下并不适用的技术。
半透明材质可以向非透明物体上投射阴影,也可以向自身或者其他半透明材质上投射阴影(如图所示)
Jade Material
Ice Material
次表面散射着色模型是为了用于模拟蜡烛,玉制物体而做的新着色模型。他们并不是完全的半透明,但会在内部散射入射进来的光。这会比实现皮肤渲染上质量稍低但开销更小。
UE4支持在GPU上模拟粒子效果,传统的CPU难以完成的上千种粒子效果可以在GPU内更快效果更好的实现。
在GPU粒子中最有趣的一项特性莫过于向量场了,一个向量场是在一个网格中均匀影响所在其中粒子运动的一个向量集,向量场在UE4中是作为一个Actors来出现的,因此他本身也可以像其他Actors一样被位移,旋转,或者是缩放,所以在运行期间他们都是可以被动态移动的。
例如一个向量场可以被放置在瀑布上,当粒子进入了向量场的边界时,他们都会被其所影响,当粒子群离开了边界其作用的效果也会淡去(fade out)。
环境光遮蔽(Ambient Occlusion): 目前使用的环境光遮蔽为SSAO(屏幕空间环境光遮蔽,Screen Space Ambient Occlusion),只会依赖与深度缓存。所以也不会被细节法线贴图或者Smoothing groups影响。因此在一些面元较少的多边形上开启这个效果时,就会显得非常生硬。所以UE4只会在选项AmbientCubemap上开启这个效果。
环境光立方体贴图(Ambient Cubemaps): 该效果对整个场景中的光照采用一立方体贴图,所以这个效果也是与当前材质所在位置是互相独立的。贴图的计算需要用到观察者的位置,材质的粗糙度(镜面反射效果),以及当前材质的面法线。这也就带来了高质量高效的环境光实现。
镜头高光(Bloom): 高光是真实世界光照的现象,较低的渲染开销却可以带来非常好的感官真实度的提升。高光效果一般可以在非常暗的背景中裸眼观察非常亮的物体观测到。
人眼适应:可以会自动调整场景的曝光度,重现从明亮环境进入黑暗环境(或相反)时所经历的效果。
镜头眩光:会在镜头转向明亮物体时自动产生镜头的眩光效果。
色调映射(Tone Mapping):使得渲染场景的颜色可以被转换或修改来得到不同的效果。这可以被用来制作诸如棕褐滤镜,或击中特效(例如红色闪光)等。